package br.com.salao.mb;

import java.util.ArrayList;
import java.util.List;
import java.util.SortedMap;
import java.util.TreeMap;

import javax.enterprise.context.SessionScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.event.ActionEvent;

import org.apache.log4j.Logger;

import br.com.salao.entity.Estabelecimento;
import br.com.salao.entity.EtapasConfiguracaoEstabelecimento;
import br.com.salao.entity.GerencEtapaConfigEstabelecimento;
import br.com.salao.entity.Login;
import br.com.salao.model.EstabelecimentoModel;
import br.com.salao.model.EtapasConfiguracaoEstabelecimentoModel;
import br.com.salao.model.GerencEtapasConfiguracaoEstabelecimentoModel;
import br.com.salao.model.LoginModel;

@ManagedBean
@SessionScoped
public class ConfiguracaoEstabelecimentoMB {

	/*	private EtapasConfiguracaoEstabelecimento etapasConfiguracaoEstabelecimento;*/	
	Logger logger = Logger.getLogger(ConfiguracaoEstabelecimentoMB.class.getName());

	private Login usuarioLogado;
	private List<Estabelecimento> listEstabelecimentos;
	private int idSelectedEstabelecimento;
	private SortedMap<String,Integer> mapEstabelecimento = new TreeMap <String,Integer>(); 
	private List<GerencEtapaConfigEstabelecimento> listGerencEtapaConfigEstab;
	private List<EtapasConfiguracaoEstabelecimento> listEtapasConfiguracaoEstabelecimentos;

	public ConfiguracaoEstabelecimentoMB(){
		init();
		buscarUsuarioLogado();
		buscarEstabelecimentosPorUsuario();
		popularComboEstabelecimento();
		buscarEtapasdeConfiguracao();
	}	

	public void init(){
		listGerencEtapaConfigEstab = new ArrayList<GerencEtapaConfigEstabelecimento>();
		listEtapasConfiguracaoEstabelecimentos = new ArrayList<EtapasConfiguracaoEstabelecimento>();
	}

	public void buscarUsuarioLogado(){

		LoginModel loginModel = new LoginModel();
		usuarioLogado = loginModel.recuperaLogin();

	}

	public void buscarEtapasdeConfiguracao(){
		EtapasConfiguracaoEstabelecimentoModel etapasConfiguracaoEstabelecimentoModel = new EtapasConfiguracaoEstabelecimentoModel();
		listEtapasConfiguracaoEstabelecimentos = etapasConfiguracaoEstabelecimentoModel.listar();
	}
	

	public void buscarEstabelecimentosPorUsuario(){

		//busca estabelecimentos por usuario logado(master)
		try {

			if(usuarioLogado.getId() == 0){
				buscarUsuarioLogado();	
			}
			EstabelecimentoModel model = new EstabelecimentoModel();		
			listEstabelecimentos = model.buscarEstabelecimentosPorUsuario(usuarioLogado);

		} catch (Exception e) {

			StringBuffer sb = new StringBuffer();
			sb.append(":: ConfiguracaoEstabelecimentoMB :: buscarEstabelecimentosPorUsuario :: Erro ao buscar estabelecimentos ::");
			sb.append(e.getMessage());
			sb.append(e.getCause());

			logger.error(sb.toString());
		}		
	}

	public void popularComboEstabelecimento(){
		if(listEstabelecimentos.size()>0){
			for(Estabelecimento estabelecimento: listEstabelecimentos){
				mapEstabelecimento.put(estabelecimento.getNomeFantasia(), estabelecimento.getId());
			}
		}
	}

	public Estabelecimento buscarEstabelecimentosPorId(int idEstabelecimento){
		EstabelecimentoModel model = new EstabelecimentoModel();
		return model.buscarEstabelecimentoPorId(idSelectedEstabelecimento);
	}

	public String findGerencEtapaConfigEstabPorIdEstabelecimento(){
		listGerencEtapaConfigEstab = new ArrayList<GerencEtapaConfigEstabelecimento>();
		GerencEtapasConfiguracaoEstabelecimentoModel model = new GerencEtapasConfiguracaoEstabelecimentoModel();
		listGerencEtapaConfigEstab = model.buscarGerencEtapaConfigEstabPorIdEstabelecimento(idSelectedEstabelecimento);
		return "etapasConfiguracao";
	}

	public String buscarGerencEtapaConfigEstabPorIdEstabelecimento(ActionEvent actionEvent){
		return findGerencEtapaConfigEstabPorIdEstabelecimento();
	}	

	public Login getUsuarioLogado() {
		return usuarioLogado;
	}

	public void setUsuarioLogado(Login usuarioLogado) {
		this.usuarioLogado = usuarioLogado;
	}

	public List<Estabelecimento> getListEstabelecimentos() {
		return listEstabelecimentos;
	}

	public void setListEstabelecimentos(List<Estabelecimento> listEstabelecimentos) {
		this.listEstabelecimentos = listEstabelecimentos;
	}

	public int getIdSelectedEstabelecimento() {
		return idSelectedEstabelecimento;
	}

	public void setIdSelectedEstabelecimento(int idSelectedEstabelecimento) {
		this.idSelectedEstabelecimento = idSelectedEstabelecimento;
	}

	public SortedMap<String, Integer> getMapEstabelecimento() {
		return mapEstabelecimento;
	}

	public void setMapEstabelecimento(SortedMap<String, Integer> mapEstabelecimento) {
		this.mapEstabelecimento = mapEstabelecimento;
	}

	public List<GerencEtapaConfigEstabelecimento> getListGerencEtapaConfigEstab() {
		return listGerencEtapaConfigEstab;
	}

	public void setListGerencEtapaConfigEstab(
			List<GerencEtapaConfigEstabelecimento> listGerencEtapaConfigEstab) {
		this.listGerencEtapaConfigEstab = listGerencEtapaConfigEstab;
	}

	public List<EtapasConfiguracaoEstabelecimento> getListEtapasConfiguracaoEstabelecimentos() {
		return listEtapasConfiguracaoEstabelecimentos;
	}

	public void setListEtapasConfiguracaoEstabelecimentos(
			List<EtapasConfiguracaoEstabelecimento> listEtapasConfiguracaoEstabelecimentos) {
		this.listEtapasConfiguracaoEstabelecimentos = listEtapasConfiguracaoEstabelecimentos;
	}

	
}
